Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Поиск по сайту работает через раз (natmc)
Author Message
natmc
Заглянувший



Joined: 22 Apr 2007
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Sun Apr 22, 2007 11:57 am (написано за 11 минут 56 секунд)
   Post subject: Поиск по сайту работает через раз
Reply with quote

Здравствуйте. Помогите начинающему пожалуйста.
Пишу поиск по сайту и столкнулась со следующей проблемой.
Code (php): скопировать код в буфер обмена
$search = $_REQUEST["stroka"];
$search = substr (www.php.net/substr)($search, 0, 64); // оставляем только 64 символа
$search = preg_replace (www.php.net/preg_replace)("/[^\w\x7F-\xFF\s]/", " ", $search); // убираем посторонние символы
$good = trim (www.php.net/trim)(preg_replace (www.php.net/preg_replace)("/\s(\S{1,2})\s/", " ", ereg_replace (www.php.net/ereg_replace)(" +", "  "," $search "))); // поиск по словам больше 2 символов
$good = ereg_replace (www.php.net/ereg_replace)(" +", " ", $good); // сжимаем двойные пробелы

unset (www.php.net/unset)($array);
$query = @mysql_query (www.php.net/mysql_query)("SELECT * FROM table WHERE field LIKE '%". str_replace (www.php.net/str_replace)(" ", "%' AND field LIKE '%", $good). "%'");
$rows = @mysql_num_rows (www.php.net/mysql_num_rows)($query);
$row = @mysql_fetch_array (www.php.net/mysql_fetch_array)($query);

// id полей, найденных в поиске закидываем в массив
for ($i=1; $i<=$rows; $i++)
        $array[] = $row[0];
                                       
if (count (www.php.net/count)($array) !=0)
{
        $row_news = array_unique (www.php.net/array_unique)($array);// удаляем повторяющиеся эл-ты массива
        echo (www.php.net/echo)  '<p>Найдено строк: '.$result."<br>";
                                               
        sort (www.php.net/sort)($row_news);
        reset (www.php.net/reset)($row_news);
        // пербор элементов с учетом их индекса
        while (list($key,$val) = each (www.php.net/each) ($row_news))
        {
                $query = @mysql_query (www.php.net/mysql_query)("SELECT * FROM table WHERE id = '$val'");
                $row = @mysql_fetch_array (www.php.net/mysql_fetch_array)($query);
                echo (www.php.net/echo) $row[1];
        }
}
вроде по-логике все правильно... но когда начинаю искать, (а я точно знаю, что например слово ДОКУМЕНТ у меня есть в 2-х документах) результат поиска - 1 документ... а во втором слова поиска она вообще не видит...
еще хуже дела, если в строке запроса $query вместо AND поставить OR...
Где вилы? Помогите пожалуйста....
Back to top
View user's profile Send private message Send e-mail
Bueno
Участник форума



Joined: 13 Feb 2007
Posts: 32
Карма: 2
   поощрить/наказать


PostPosted: Mon Apr 23, 2007 9:57 am (спустя 22 часа 10 секунд; написано за 3 минуты 58 секунд)
   Post subject:
Reply with quote

что то либо я в лыжи обутый, или одно из двух - но вот ну никак не могу врубиться в смысл (необходимость) всех наворотов..
я бы сделал что то типа этого (синтаксис не проверял, писал сходу)
Code (php): скопировать код в буфер обмена
$search = $_REQUEST["stroka"];
$search = substr (www.php.net/substr)($search, 0, 64); //
$search = preg_replace (www.php.net/preg_replace)("/[^\w\x7F-\xFF\s]/", " ", $search); //
$good   = trim (www.php.net/trim)(preg_replace (www.php.net/preg_replace)("/\s(\S{1,2})\s/", " ", ereg_replace (www.php.net/ereg_replace)(" +", "  "," $search "))); //
$good   = ereg_replace (www.php.net/ereg_replace)(" +", " ", $good); //

$query = @mysql_query (www.php.net/mysql_query)("SELECT * FROM table WHERE field LIKE '%". preg_replace (www.php.net/preg_replace)("/ /", "%' AND field LIKE '%", $good). "%' ORDER BY field");

if(($rows = @mysql_num_rows (www.php.net/mysql_num_rows)($query)) < 1){

        echo (www.php.net/echo) '  ';

}else{

        echo (www.php.net/echo)  '<p> : '.$rows.'</p><br>';
       
        while($row = @mysql_fetch_array (www.php.net/mysql_fetch_array)($query)){
                echo (www.php.net/echo) $row[1];
            }
}
Back to top
View user's profile Send private message
natmc
Заглянувший



Joined: 22 Apr 2007
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Mon Apr 23, 2007 10:49 am (спустя 51 минуту; написано за 43 секунды)
   Post subject: ответ Bueno
Reply with quote

огромное спасибо... все работает ;)
И это не Вы в лыжи обутый... это у меня логика женская :)))))
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML